package pda.agenda.ihm;

import pda.agenda.controller.*;

import java.awt.*;
import javax.swing.*;
import javax.swing.border.*;

import java.util.Calendar;
import java.util.GregorianCalendar;

public class AgendaViewMois extends JPanel {

	private BorderLayout fenetreMoisLayout;

	private JPanel fenetreMoisMenu;
	private BorderLayout fenetreMoisMenuLayout;
	private JPanel fenetreMoisContenu;
	private GridLayout fenetreMoisContenuLayout;

	private JPanel fenetreMoisMenuGauche;
	private BorderLayout fenetreMoisMenuGaucheLayout;
	private JPanel fenetreMoisMenuDroite;
	private BorderLayout fenetreMoisMenuDroiteLayout;

	private JButton moisPrecedant;
	private JLabel moisCourant;
	private JButton moisSuivant;

	private JButton anneePrecedante;
	private JLabel anneeCourante;
	private JButton anneeSuivante;

	private JButton[] joursDuMois;

	public AgendaViewMois() {
		this.creerInterface();
		this.attacherReaction();
	}

	private void creerInterface() {
		this.fenetreMoisLayout = new BorderLayout();
		this.setLayout(fenetreMoisLayout);

		// Couleur, taille, mise en forme des composants
		Color fondMenu = new Color(41,52,57);
		Dimension tailleLabel = new Dimension(80,20);
		BoutonMenu apparenceBouton = new BoutonMenu();

		// Menu qui permet de changer de mois et d'année
		this.fenetreMoisMenu = new JPanel();
		this.fenetreMoisMenuLayout = new BorderLayout();
		this.fenetreMoisMenu.setLayout(fenetreMoisMenuLayout);

		// On change l'apparence des composants
		this.fenetreMoisMenu.setBackground(fondMenu);

		// A gauche, on change les mois
		this.fenetreMoisMenuGauche = new JPanel();
		this.fenetreMoisMenuGaucheLayout = new BorderLayout();
		this.moisPrecedant = new JButton("<");
		this.moisSuivant = new JButton(">");
		this.moisCourant = new JLabel();

		// On change l'apparence des composants
		this.fenetreMoisMenuGauche.setBackground(fondMenu);

		this.moisCourant.setForeground(Color.WHITE);
		this.moisCourant.setPreferredSize(tailleLabel);
		this.moisCourant.setHorizontalAlignment(JLabel.CENTER);

		this.moisPrecedant.setUI(apparenceBouton);
		this.moisSuivant.setUI(apparenceBouton);

		fenetreMoisMenuGauche.add(moisPrecedant, BorderLayout.LINE_START);
		fenetreMoisMenuGauche.add(moisCourant, BorderLayout.CENTER);
		fenetreMoisMenuGauche.add(moisSuivant, BorderLayout.LINE_END);

		// A droite, on change les années
		this.fenetreMoisMenuDroite = new JPanel();
		this.fenetreMoisMenuDroiteLayout = new BorderLayout();
		this.anneePrecedante = new JButton("<");
		this.anneeSuivante = new JButton(">");
		this.anneeCourante = new JLabel();

		// On change l'apparence des composants
		this.fenetreMoisMenuDroite.setBackground(fondMenu);

		this.anneeCourante.setForeground(Color.WHITE);
		this.anneeCourante.setHorizontalAlignment(JLabel.CENTER);

		this.anneePrecedante.setUI(apparenceBouton);
		this.anneeSuivante.setUI(apparenceBouton);

		fenetreMoisMenuDroite.add(anneePrecedante, BorderLayout.LINE_START);
		fenetreMoisMenuDroite.add(anneeCourante, BorderLayout.CENTER);
		fenetreMoisMenuDroite.add(anneeSuivante, BorderLayout.LINE_END);

		fenetreMoisMenu.add(fenetreMoisMenuGauche, BorderLayout.LINE_START);
		fenetreMoisMenu.add(fenetreMoisMenuDroite, BorderLayout.LINE_END);

		// Contenu du mois, c'est à dire la liste des jours
		this.fenetreMoisContenu = new JPanel();
		this.fenetreMoisContenuLayout = new GridLayout(7,7);
		this.fenetreMoisContenu.setLayout(this.fenetreMoisContenuLayout);

		this.joursDuMois = new JButton[(7*7)];

		this.joursDuMois[0] = new JButton("Lun.");
		this.joursDuMois[1] = new JButton("Mar.");
		this.joursDuMois[2] = new JButton("Mer.");
		this.joursDuMois[3] = new JButton("Jeu.");
		this.joursDuMois[4] = new JButton("Ven.");
		this.joursDuMois[5] = new JButton("Sam.");
		this.joursDuMois[6] = new JButton("Dim.");
		// Mise en forme (Réduction des marges, un peu de couleurs)
		int i = 0;
		Insets marges = new Insets(1,1,1,1);
		for(i=0;i<7;i++) {
			this.joursDuMois[i].setMargin(marges);
			this.joursDuMois[i].setBackground(Color.GRAY);
			this.joursDuMois[i].setForeground(Color.WHITE);
			this.fenetreMoisContenu.add(this.joursDuMois[i]);
		}
		for(i=7;i<(7*7);i++) {
			this.joursDuMois[i] = new JButton();
			this.joursDuMois[i].setBackground(Color.BLACK);

			// Reduit la marge interne des boutons.
			this.joursDuMois[i].setMargin(marges);
			this.fenetreMoisContenu.add(this.joursDuMois[i]);	
		}

		this.add(fenetreMoisMenu, BorderLayout.NORTH);
		this.add(fenetreMoisContenu, BorderLayout.CENTER);
	}

	private void attacherReaction() {
		// Ecouteur sur les boutons
		EcouteurActionBouton ecouteurBouton = new EcouteurActionBouton();
		// -- Changement de mois
		this.moisPrecedant.addActionListener(ecouteurBouton);
		this.moisSuivant.addActionListener(ecouteurBouton);
		// -- Changement d'année
		this.anneePrecedante.addActionListener(ecouteurBouton);
		this.anneeSuivante.addActionListener(ecouteurBouton);
		// -- Accéder à la journée
		int i = 7;
		for(i=7;i<(7*7);i++) {
			this.joursDuMois[i].addActionListener(ecouteurBouton);
		}
	}

	public JLabel getLabelMoisCourant() {
		return this.moisCourant;
	}

	public JButton getBoutonMoisPrecedant() {
		return this.moisPrecedant;
	}

	public JButton getBoutonMoisSuivant() {
		return this.moisSuivant;
	}

	public JButton getJoursDuMois(int index) {
		return this.joursDuMois[index];
	}

	public JLabel getLabelAnneeCourante() {
		return this.anneeCourante;
	}

	public JButton getBoutonAnneePrecedante() {
		return this.anneePrecedante;
	}

	public JButton getBoutonAnneeSuivante() {
		return this.anneeSuivante;
	}

	public JButton getUnBoutonJourneeDansMois(Object src) {
		// Les 6 premiers boutons indiquent les noms des jours (Lundi, Mardi...)
		int i = 7;
		boolean existe = false;
		JButton bouton = null;
		while(!existe && i < this.joursDuMois.length) {
			if(src == this.joursDuMois[i]) {
				existe = true;
				bouton = this.joursDuMois[i];
			}
			i++;
		}
		return bouton;
	}

	public boolean estUnBoutonJourneeDansMois(Object src) {
		// Les 6 premiers boutons indiquent les noms des jours (Lundi, Mardi...)
		int i = 7;
		boolean existe = false;
		while(!existe && i < this.joursDuMois.length) {
			if(src == this.joursDuMois[i]) {
				existe = true;
			}
			i++;
		}
		return existe;
	}

} // fin classe

